package cn.iocoder.yudao.module.member.service.job;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.job.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.job.MemberCompanyJobDO;
import cn.iocoder.yudao.module.member.dal.dataobject.job.MemberJobDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 招聘职位 Service 接口
 *
 * @author 谭万全
 */
public interface MemberJobService {

    /**
     * 创建招聘职位
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createJob(@Valid MemberJobCreateReqVO createReqVO);

    /**
     * 更新招聘职位
     *
     * @param updateReqVO 更新信息
     */
    void updateJob(@Valid MemberJobUpdateReqVO updateReqVO);

    /**
     * 更新招聘职位
     *
     * @param memberJobDO 更新信息
     */
    void updateJob(@Valid MemberJobDO memberJobDO);
    void updateOrderNum(Long id);
    void updateJobFixed(  Long id,  Integer timingStatus, String fixedTime );

    /**
     * 招聘职位批量置顶
     *
     * @param ids 更新信息
     */
    void setJobsTopStatus(@Valid List<Long> ids,String status);

    /**
     * 招聘职位批量发布
     *
     * @param ids 更新信息
     */
    void setJobStatus(@Valid List<Long> ids);


    void setJobStatus(@Valid List<Long> ids,String status);
    /**
     * 访问数量+1
     *
     */
    Integer addCount(Long id,String type,int sours);

    /**
     * 招聘职位批量删除
     *
     * @param ids 更新信息
     */
    void deleteJob(@Valid List<Long> ids);


    List<MemberJobDO> getAllJobByIds(List<Long> ids);
    /**
     * 审核招聘职位
     *
     * @param updateReqVO 更新信息
     */
     void examinJob(MemberJobUpdateReqVO updateReqVO);

    /**
     * 删除招聘职位
     *
     * @param id 编号
     */
    void deleteJob(Long id);

    /**
     * 获得招聘职位
     *
     * @param id 编号 type 1记录 其他不记录
     * @return 招聘职位
     */
    MemberJobDO getJob(Long id,int type);

    /**
     * 获得招聘职位
     *
     * @param id 编号
     * @return 招聘职位
     */
    MemberJobDO getJob(Long id);


    /**
     * 获得招聘职位
     *
     * @param id 编号
     * @return 招聘职位
     */
    MemberJobDO getJobAll(Long id);
    /**
     * 获得招聘职位列表
     *
     * @param ids 编号
     * @return 招聘职位列表
     */
    List<MemberJobDO> getJobList(Collection<Long> ids);


    /**
     * 获得招聘职位列表
     *
     * @return 招聘职位列表
     */
    List<MemberCompanyJobDO> getJobListTop2(Long companyId);

    /**
     * 获得招聘职位分页
     *
     * @param pageReqVO 分页查询
     * @return 招聘职位分页
     */
    PageResult<MemberJobDO> getJobPage(MemberJobPageReqVO pageReqVO);

    /**
     * 获得招聘职位分页
     *
     * @return 招聘职位分页
     */
    List<MemberJobDO> getHotJob(Integer pageSize,List<Long> ids);

    List<MemberJobDO> getHotJob();


    /**
     * 获得招聘职位列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 招聘职位列表
     */
    List<MemberJobDO> getJobList(MemberJobExportReqVO exportReqVO);


    /**
     * 获得未发布招聘职位分页
     *
     * @param pageReqVO 分页查询
     * @return 招聘职位分页
     */
    PageResult<MemberJobDO> getJobWaitExaminePage(MemberJobPageReqVO pageReqVO,List<String> flag);

    List<MemberJobDO> getJobPage1(MemberJobPageReqVO pageReqVO,List<String> statuss,List<Long> ids);

    PageResult<MemberJobDO> getJobPage(MemberJobPageReqVO pageReqVO,List<String> flag);

    List<MemberJobDO> getJobViewPage(MemberJobPageReqVO pageReqVO );

    /**
     * 导入职位
     * @param list
     * @param updateSupport
     * @return
     */
    JobImportRespVO importJob(List<EnterpriseJobImputReqVO> list, Boolean updateSupport);


    PageResult<MemberJobDO> getMemberJobPage(MemberJobPageReqVO pageReqVO );

    MemberJobDO getRecoveryMemberJobById(Long id);

    void updateBatchRecoveryMemberJob(List<Long> list);



    List<MemberJobDO> getRankingJobList(MemberJobPageReqVO request);

    void updateJobHot(  Long id, Integer isHot );

    void updateJobNew(  Long id, Integer isNew );

    void updateRankingJobSort(RankingJobIdReqVO rankingIdReqVO);

}
